Companies often have the need to better capture, manage, and leverage reusable software assets for both internal and external use and in client engagements. Code reuse, also known as software reuse, is the practice of utilizing existing software, or alternatively, software knowledge to build new software.
Sometimes, isolated code developers may not always be aware of where their code or tools may best be reused. Anticipating future reuse case scenarios for code, software, applications, or applets is one means to address the problem of recognizing existing solutions to developer, user, or customer problems. Recognition is difficult to automate because categories of problems evolve rapidly, and so declared relationships between existing solutions and new problems are almost entirely absent when the need for reuse arises. The novelty a problem presents compared to a past problem in its class usually increases rapidly with time elapsed. However, the reusability of code, software, or other solutions decays more slowly. Therefore the ability to identify reusable solutions (either in the form of code, software, applications, or applets) diminishes with time, even though the value of their reuse largely remains. Therefore, much is lost due to the difficulty in automating the identification of reuse scenarios.